//Title：     defines
//Author:     Yang Siyang
//Description:常用常量的定义，在需要的文件里
//              `include "defines.v"
//---------------------------------------------------------
`timescale 1ns / 1ps

`define ZERO_WORD  32'h0     //零字
`define ZERO_DOUBLE_W 64'h0  //零双字
`define REG_BUS    63 : 0               //总线宽度 64位
`define INST_BUS   31 : 0               //指令宽度 32位
`define REG_ADDR_BUS 4 : 0              //32个寄存器 地址长度5位
`define TRUE 1'b1
`define FALSE 1'b0
`define RST_ENABLE 1'b1
`define CPU_RST_ADDR 64'h0              //PC寄存器复位地址


// I型指令
`define INST_TYPE_I 7'b0010011  //opcode
`define INST_ADDI   3'b000      //func3
`define INST_SLTI   3'b010
`define INST_SLTIU  3'b011
`define INST_XORI   3'b100
`define INST_ORI    3'b110
`define INST_ANDI   3'b111
`define INST_SLLI   3'b001
`define INST_SRI    3'b101  //SRLI inst[30] = 0
                            //SRAI inst[30] = 1

// L型
`define INST_TYPE_L 7'b0000011
`define INST_LB     3'b000
`define INST_LH     3'b001
`define INST_LW     3'b010
`define INST_LBU    3'b100
`define INST_LHU    3'b101     

// S型
`define INST_TYPE_S 7'b0100011
`define INST_SB     3'b000
`define INST_SH     3'b001
`define INST_SW     3'b010

// R型
`define INST_TYPE_R 7'b0110011
// R type inst
`define INST_ADD_SUB 3'b000 //ADD inst[30] = 0, SUB inst[30] =1
`define INST_SLL     3'b001
`define INST_SLT     3'b010
`define INST_SLTU    3'b011
`define INST_XOR     3'b100
`define INST_SRL_SRA 3'b101  //SRL inst[30] = 0, SRA inst[30] =1
`define INST_OR      3'b110
`define INST_AND     3'b111


// J型
`define INST_JAL    7'b1101111
`define INST_JALR   7'b1100111
`define INST_LUI    7'b0110111
`define INST_AUIPC  7'b0010111

// B型
`define INST_TYPE_B 7'b1100011
`define INST_BEQ    3'b000
`define INST_BNE    3'b001
`define INST_BLT    3'b100
`define INST_BGE    3'b101
`define INST_BLTU   3'b110
`define INST_BGEU   3'b111


// CSR inst
`define INST_CSR    7'b1110011
`define INST_CSRRW  3'b001
`define INST_CSRRS  3'b010
`define INST_CSRRC  3'b011
`define INST_CSRRWI 3'b101
`define INST_CSRRSI 3'b110
`define INST_CSRRCI 3'b111